home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------------------------
- :Program. MenuTest.
- :Contents. Testprogram, öffnet Screen, Window und Menü.
- :Author. Klaus Hlawaty.
- :Address. Waldhof
- :Address. 3579 Schrecksbach
- :History. v1.0 - 23.Nov.91. ???
- :Imports. Speed.
- :Imports. Menu.
- :Imports. xDisplay.
- :Imports. xIntui.
- :Imports. IntuiPointer.
- :Copyright. PD
- :Language. Oberon v2.13
- :Translator. OBERON v2.13 / OLink v2.13d
- ------------------------------------------------------------------------ *)
- MODULE MenuTest;
-
- IMPORT
- c:Conversions,
- D:Display,
- xD:xDisplay,
- e:Exec,
- i:Intuition,
- xi:xIntui,
- ip:IntuiPointer,
- M:Menu,
- ng:Requests,
- NoGuruRq,
- s:SYSTEM;
-
- VAR
- MyScreen : D.ScreenPtr;
- MyWindow : M.WinMenuPtr;
-
- class : LONGSET;
- code : INTEGER;
- iadr : s.ADDRESS;
-
- Item : i.MenuItemPtr;
- Kennung : INTEGER;
- nMenu,
- nItem,
- nSubI : INTEGER;
-
- Str : e.STRING;
- Dummy : BOOLEAN;
-
- BEGIN (* ------------------- Hauptprogramm --------------------- *)
- NEW(MyScreen);
- ng.Assert(MyScreen#NIL,"Screenspeicher nicht verfügbar");
- NEW(MyWindow);
- ng.Assert(MyWindow#NIL,"Windowspeicher nicht verfügbar");
- MyScreen^.screen := NIL;
- MyWindow^.window := NIL;
- ng.Assert(D.OpenScreen(MyScreen,"TestScreen",
- 0,0,640,256,2,
- TRUE,FALSE),
- "Screen nicht geöffnet");
- xD.WindowFlags := LONGSET{i.backDrop, i.borderless,
- i.activate};
- ng.Assert(M.OpenWinMenu(MyWindow,"TestWindo",
- 0,0,640,256,
- MyScreen.screen),
- "Window nicht geöffnet");
- i.OldModifyIDCMP(MyWindow.window,LONGSET{i.menuPick});
- ip.Busy(MyWindow.window);
- (* ------------- Ende des Open Block ------------ *)
- (* ---------------------------------------------------------------------- *)
- (* ------------------- Aufbau des Menüs --------------------------------- *)
- (* ---------------------------------------------------------------------- *)
- M.AddMenu(MyWindow,"Menü X");
- Item := M.AddItem(MyWindow
- ,"Ende"
- ,"Q"
- ,0011);
- Item := M.AddSeparator(MyWindow);
- Item := M.AddItem(MyWindow
- ,"Clear"
- ,"C"
- ,0012);
- EXCL(Item.flags,i.highComp); (* Lösche nachträglich Invers *)
- INCL(Item.flags,i.highBox); (* Setze nachträglich Umrandung *)
- M.AddMenu(MyWindow,"Menü 2");
- Item := M.AddItem(MyWindow
- ,"Item 21"
- ,"\o"
- ,0021);
- Item := M.AddSubSeparator(MyWindow);
- Item := M.AddTSubI(MyWindow
- ,"Item 211"
- ,"Y"
- ,0211
- ,TRUE);
- Item := M.AddTSubI(MyWindow
- ,"Item 212"
- ,"X"
- ,0212
- ,FALSE);
- M.MutualEx(MyWindow,211 , 212 , TRUE);
- (* Item 211 & 212 schließen sich gegenseitig aus *)
- Item := M.AddTSubI(MyWindow
- ,"Item 213"
- ,"Z"
- ,0213
- ,FALSE);
- M.MutualEx(MyWindow,211 , 213 , TRUE);
- (* Item 211 & 213 schließen sich gegenseitig aus *)
- M.MutualEx(MyWindow,212 , 213 , TRUE);
- (* Item 212 & 213 schließen sich gegenseitig aus *)
- (* Alle Item's 211 .. 213 schließen sich gegenseitig aus *)
- Item := M.AddSubSeparator(MyWindow);
- Item := M.AddSeparator(MyWindow);
- Item := M.AddItem(MyWindow
- ,"Item 22"
- ,"A"
- ,0022);
- M.AddMenu(MyWindow,"Menü 3");
- Item := M.AddItem(MyWindow
- ,"Item 31"
- ,"\o"
- ,0031);
- Item := M.AddSeparator(MyWindow);
- Item := M.AddTItem(MyWindow
- ,"Item 32"
- ,"\o"
- ,0032
- ,FALSE);
- Item := M.AddSeparator(MyWindow);
- Item := M.AddItem(MyWindow
- ,"Item 33"
- ,"\o"
- ,0033);
- EXCL(Item.flags,i.itemEnabled);
- (* Nachträgliche Änderung *)
- (* Item nicht mehr wählbar *)
- (* ======================= *)
-
- M.FmtMenu(MyWindow); (* Formatiert das Menü *)
- M.MenuON(MyWindow); (* Aktiviert das Menü *)
- (* ---------------------------------------------------------------------- *)
- (* ------------------- Abfrage des Menüs -------------------------------- *)
- (* ---------------------------------------------------------------------- *)
- ip.Busy(MyWindow.window);
- ip.Normal(MyWindow.window);
- D.ClrHome(MyWindow);
- D.Position(MyWindow,0,2);
- D.CursorOn(MyWindow);
- REPEAT
- ip.Normal(MyWindow.window);
- Item := M.Wait(MyWindow,class,code,iadr);
- WHILE(Item # NIL)DO
- Kennung := Item(M.MItem).Kennung; (* Item : M.MItemPtr *)
- (* Kennung wird - wegen Multiselect - erst hier geholt *)
- ip.Busy(MyWindow.window); (* Mouse = ZZZ *)
- (* ----------------------------- Textausgabe und Itemnummern *)
- D.Write(MyWindow,"Intuition : MenuNr.");
- xi.decodeMenu(code,nMenu,nItem,nSubI);
- Dummy := c.IntToString(nMenu,Str,3);
- D.Write(MyWindow,Str);
- D.Write(MyWindow,"| ItemNr.");
- Dummy := c.IntToString(nItem,Str,3);
- D.Write(MyWindow,Str);
- D.Write(MyWindow,"| SubItemNr.");
- Dummy := c.IntToString(nSubI,Str,3);
- D.Write(MyWindow,Str);
- D.Write(MyWindow,"# Kennung:");
- Dummy := c.IntToString(Kennung,Str,3);
- D.Write(MyWindow,Str);
- D.Write(MyWindow,". ");
- (* -------------------- Bei Toggel-Item's Ausgabe von ON/OFF *)
- IF(i.checkIt IN Item.flags)THEN
- IF(i.checked IN Item.flags)THEN
- D.Write(MyWindow," ON ");
- IF(Kennung = 32)THEN
- M.ItemON(MyWindow,33); (* Anschalten von Item 33 *)
- END;
- ELSE
- D.Write(MyWindow," OFF");
- IF(Kennung = 32)THEN
- M.ItemOFF(MyWindow,33); (* Abschalten von Item 33 *)
- END;
- END (* IF checked *);
- END (* IF checkit *);
- D.WriteLn(MyWindow);
- (* ----------------------------------------- Item 12 = Clear *)
- IF(Kennung = 12)THEN
- D.ClrHome(MyWindow);
- D.Position(MyWindow,0,2);
- D.CursorOn(MyWindow);
- END;
- (* ------------------------------ Hole nächstes Item bei MultiSelect *)
- Item := M.ItemAdr(MyWindow,Item.nextSelect); (* Item : i.MenuItemPtr *)
- END (* WHILE *);
- IF(i.windowSizing IN class)THEN
- D.Init(MyWindow);
- END (* IF windowSizing *);
- UNTIL(i.closeWindow IN class)OR(Kennung = 11); (* Item 11 = Ende *)
-
- (* ------------- Begin des Endes ---------------- *)
- CLOSE
- ip.Normal(MyWindow.window);
- IF(MyWindow^.window # NIL)THEN
- M.MenuOFF(MyWindow);
- M.Close(MyWindow);
- END;
- IF(MyScreen^.screen # NIL)THEN
- M.Close(MyScreen);
- END;
-
- IF(MyScreen # NIL)THEN
- DISPOSE(MyScreen);
- END;
- IF(MyWindow # NIL)THEN
- DISPOSE(MyWindow);
- END;
- END MenuTest.
-